package 康复训练_JavaGo并驾齐驱;

public class Jz04二维数组中的查找 {

    /**
     * 在一个 n * m 的二维数组中，每一行都按照从左到右递增的顺序排序，
     * 每一列都按照从上到下递增的顺序排序。请完成一个高效的函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。
         [
             [1,   4,  7, 11, 15],
             [2,   5,  8, 12, 19],
             [3,   6,  9, 16, 22],
             [10, 13, 14, 17, 24],
             [18, 21, 23, 26, 30]
         ]
     */

    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if (matrix.length == 0 || matrix[0].length == 0) {
            return false;
        }
        // 从右下角将它识别为 搜索二叉树 进行查找
        int x = 0;
        int y = matrix.length - 1;

        while (x < matrix[0].length && y >= 0) {
            int num = matrix[y][x];
            if (num > target) {
                // 上
                y--;
            } else if (num < target) {
                // 右
                x++;
            } else {
                return true;
            }
        }

        return false;
    }

    public static void main(String[] args) {
        Jz04二维数组中的查找 n = new Jz04二维数组中的查找();
        int[][] arr = {{1,4,7,11,15},{2,5,8,12,19},{3,6,9,16,22},{10,13,14,17,24},{18,21,23,26,30}};
        n.findNumberIn2DArray(arr, 5);
    }

}
